﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Cotizav.CONEXION;
using System.Transactions;
using System.Data.Linq;

namespace Cotizav.CONTROLADOR
{
    class CtrlCaracteristica
    {
        private ConexionDataContext conexion;
        
        internal void registrarCaracteristica(CONEXION.CARACTERISTICA carac, CONEXION.EQUIPO equipo)
        {
            using (conexion = new ConexionDataContext())
            {
                using (TransactionScope transactionscope = new TransactionScope())
                {
                    try
                    {
                        int correlativoCaracteristica = conexion.COTIZAV_CORRELATIVO.Single(x => x.IDENTIFICADOR == "COTIZAV").CARACTERISTICA.Value;
                        string num = Convert.ToString(correlativoCaracteristica);
                        string numero = num.Trim().PadLeft(11, '0');
                        string idCaracteristica = "CAR_" + numero;

                        carac.idCaracteristica = idCaracteristica;
                        carac.idequipo = equipo.idEquipo;
                        carac.eliminado = 0;
                        carac.statusflag = string.Empty;

                        conexion.CARACTERISTICA.InsertOnSubmit(carac);
                        conexion.SubmitChanges();
                        conexion.increm_ContCaracteristica();

                        transactionscope.Complete();
                    }
                    catch (Exception)
                    {
                        throw;
                    }
                }
            }
        }

        internal void actualizarCaracteristica(CARACTERISTICA carUpd, EQUIPO equipo)
        {
            using (conexion = new ConexionDataContext())
            {
                try
                {
                    CARACTERISTICA caract = conexion.CARACTERISTICA.Single(x => x.idCaracteristica == carUpd.idCaracteristica && x.idequipo == equipo.idEquipo);

                    caract.nombreCaracteristica = carUpd.nombreCaracteristica;
                    caract.descripcion = carUpd.descripcion;
                    caract.eliminado = carUpd.eliminado;
                    caract.statusflag = string.Empty;

                    conexion.SubmitChanges();
                }
                catch (Exception)
                {
                    throw;
                }
            }
        }

        internal void eliminarCaracteristica(CARACTERISTICA carDel, EQUIPO equipo)
        {
            using (conexion = new ConexionDataContext())
            {
                try
                {
                    CARACTERISTICA car = conexion.CARACTERISTICA.Single(x => x.idCaracteristica == carDel.idCaracteristica && x.idequipo == equipo.idEquipo);
                    car.statusflag = string.Empty;
                    car.eliminado = 1;

                    conexion.SubmitChanges();
                }
                catch (Exception)
                {
                    throw;
                }
            }
        }

        internal List<CARACTERISTICA> getListCaracteristicas(string idEquipo)
        {
            using (conexion = new ConexionDataContext())
            {
                DataLoadOptions dlo = new DataLoadOptions();
                dlo.LoadWith<CARACTERISTICA>(e => e.EQUIPO);
                conexion.LoadOptions = dlo;

                var query = conexion.CARACTERISTICA.Where(x => x.idequipo == idEquipo && x.eliminado == 0);

                return query.ToList();
            }
        }
    }
}
